package com.ghost.demo;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;


public class CodeGenerator {

    @Test
    public void run() {
        AutoGenerator generator = new AutoGenerator();

        /**
         * 全局配置
         */
        GlobalConfig globalConfig = new GlobalConfig();
        // 生成java文件的路径
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        //作者
        globalConfig.setAuthor("ghost");
        //禁用是否展开文件 默认展开
        globalConfig.setOpen(false);
        //禁用重复文件是否覆盖， 默认覆盖
        globalConfig.setFileOverride(true);
        //开启swagger2模式
        globalConfig.setSwagger2(true);
        //去掉Service接口的首字母I
        globalConfig.setServiceName("%sService");
        //生成主键策略
        globalConfig.setIdType(IdType.ID_WORKER);
        //定义生成的实体类中日期类型
        globalConfig.setDateType(DateType.ONLY_DATE);
        //将全局配置加入生成器
        generator.setGlobalConfig(globalConfig);

        /**
         * 数据库配置
         */
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        //数据库驱动
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        //数据库链接地址
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ghost?serverTimezone=GMT%2B8");
        //数据库用户名
        dataSourceConfig.setUsername("root");
        //数据库密码
        dataSourceConfig.setPassword("123456");
        //数据库类型
        dataSourceConfig.setDbType(DbType.MYSQL);
        //数据库配置写入代码生成器
        generator.setDataSource(dataSourceConfig);

        /**
         * 包配置 如果
         */
        PackageConfig packageConfig = new PackageConfig();
        //包名
        packageConfig.setParent("com.ghost");
        //模块名
        packageConfig.setModuleName("eduservice");
        //controller com.ghost.eduService.controller
        packageConfig.setController("controller");
        //entity com.ghost.eduService.entity
        packageConfig.setEntity("entity");
        //service com.ghost.eduService.service
        packageConfig.setService("service");
        //mapper com.ghost.eduService.mapper
        packageConfig.setMapper("mapper");
        //包配置写入代码生成器
        generator.setPackageInfo(packageConfig);


        /**
         * 策略配置
         */
        StrategyConfig strategyConfig = new StrategyConfig();
        //需要生成的表名
        strategyConfig.setInclude("edu_teacher");
        //数据库表映射到实体的命名策略
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        //生成实体时去掉表前缀
        strategyConfig.setTablePrefix(packageConfig.getModuleName() + "_");
        //数据库表字段映射到实体的命名策略
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
        // lombok 模型 @Accessors(chain = true) setter链式操作
        strategyConfig.setEntityLombokModel(true);
        //逻辑删除字段
        strategyConfig.setLogicDeleteFieldName("is_deleted");
        //乐观锁字段
        strategyConfig.setVersionFieldName("version");
        //restful api风格控制器
        strategyConfig.setRestControllerStyle(true);
        //url中驼峰转连字符
        strategyConfig.setControllerMappingHyphenStyle(true);
        //策略配置写入代码生成器
        generator.setStrategy(strategyConfig);

        //执行
        generator.execute();
    }
}
